﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using LogicaControl;
using Interfaces.Funciones;
using ModeloEntidades;

namespace Interfaces.Consultorio
{
    public partial class UI_TramiteLista : Form
    {
        /**************************************************************
        //                       D E L E G A D O S
        **************************************************************/
        public delegate void seleccionado(Tramite_Matriculacion unTramite);
        public delegate void eliminado(Tramite_Matriculacion unTramiteParaeliminar);

        /**************************************************************
        //                         E V E N T O S
        **************************************************************/
        public event seleccionado cuandoSeleccionaUno;
        public event eliminado cuandoEliminoUno;

        /**************************************************************
        //                      A T R I B U T O S
        **************************************************************/
        private Controlador_Tramite_Matriculacion control_tramites = new Controlador_Tramite_Matriculacion();
        private Controlador_Localidades control_localidades = new Controlador_Localidades();
        private Controlador_Departamentos control_departamentos = new Controlador_Departamentos();
        //-----------------------------------------------------------------------------------------------------------
        private List<Localidad> localidades_filtradas;
        private Departamento departamento_cualquiera;
        private Localidad localidad_cualquiera;
                

        public UI_TramiteLista()
        {
            InitializeComponent();
                       
            // Cargamos los departamentos en la interface...
            this.bindingSource_departamento.DataSource = control_departamentos.obtener();

            departamento_cualquiera = control_departamentos.obtenerCualquiera();
            this.bindingSource_departamento.Insert(0, departamento_cualquiera);
            this.comboBox_busqueda_departamento.SelectedIndex = 0;
            
            // Cargamos las localidades en la interface.... (no en el tramite)
            localidades_filtradas = control_localidades.obtener();
            this.bindingSource_localidades.DataSource = localidades_filtradas;

            localidad_cualquiera = control_localidades.obtenerGenerica();
            this.bindingSource_localidades.Insert(0, localidad_cualquiera);
            this.comboBox_busqueda_localidad.SelectedIndex = 0;

        }

        private void button_seleccionar_Click(object sender, EventArgs e)
        {

            if (this.DataGridView_tramitesEnCurso.SelectedRows.Count == 1)
            {
                TramitesVista seleccionado = this.DataGridView_tramitesEnCurso.SelectedRows[0].DataBoundItem as TramitesVista;

                // Si tenemos subcriptores al avento....
                if (cuandoSeleccionaUno != null)
                {
                    this.cuandoSeleccionaUno(seleccionado.obtener_original());   // | E V E N T O |
                    this.Dispose(); // Destruyo la ventana
                }
            }

        }

        private void button_cancelar_Click(object sender, EventArgs e)
        {
            this.Dispose();
        }

        private void button_eliminar_Click(object sender, EventArgs e)
        {
            if (this.DataGridView_tramitesEnCurso.SelectedRows.Count == 1)
            {
                if (MessageBox.Show("Esta seguro que desea eliinar el tramite",
                                    "Eliminar",
                                    MessageBoxButtons.YesNo,
                                    MessageBoxIcon.Warning,
                                    MessageBoxDefaultButton.Button1,
                                    MessageBoxOptions.RightAlign)
                                    ==
                                    System.Windows.Forms.DialogResult.Yes)
                {
                    TramitesVista eliminado = this.DataGridView_tramitesEnCurso.SelectedRows[0].DataBoundItem as TramitesVista;
                    this.DataGridView_tramitesEnCurso.Rows.RemoveAt(this.DataGridView_tramitesEnCurso.SelectedRows[0].Index);
                    control_tramites.eliminar(eliminado.obtener_original());

                }
            }
        }

        private void button_buscar_Click(object sender, EventArgs e)
        {
            button_buscar.Enabled = false;            
            MouseCursor.en_espera();
            //---------------------------------------------------------------------------------------------------------------------------
            BindingSource_tramitesEnCurso.Clear();
            BindingSource_tramitesEnCurso.DataSource = control_tramites.obtener_vista_enCurso(textBox_busqeuda_razon_social.Text, 
                                                                                              textBox_busqeuda_titular.Text,
                                                                                              obtener_Localidad_seleccionada().nombre,
                                                                                              obtener_Departamento_seleccionado().nombre);
            //---------------------------------------------------------------------------------------------------------------------------
            MouseCursor.original();
            button_buscar.Enabled = true;
            
        }

        private Localidad obtener_Localidad_seleccionada()
        {
            return (Localidad)bindingSource_localidades.Current;
        }

        private Departamento obtener_Departamento_seleccionado()
        {
            return (Departamento)comboBox_busqueda_departamento.SelectedItem;
        }

        private void comboBox_busqueda_departamento_SelectedIndexChanged(object sender, EventArgs e)
        {
            if ((bindingSource_departamento.Current != null) & (localidades_filtradas != null))
            {
                var departamento_seleccionado = obtener_Departamento_seleccionado();

                // Si es un departamento cualquiera
                if (departamento_seleccionado == departamento_cualquiera)
                {
                    // Todas las localidades
                    this.bindingSource_localidades.DataSource = localidades_filtradas;
                    this.bindingSource_localidades.Insert(0, localidad_cualquiera);
                }
                // Si no es un departamento cualquiera (se selecciono uno)
                else
                {
                    // Las localidades que esten en el departamento seleccionado
                    this.bindingSource_localidades.DataSource = localidades_filtradas.Where(x => x.Departamento == departamento_seleccionado).ToList<Localidad>();
                    this.bindingSource_localidades.Insert(0, localidad_cualquiera);
                }
            }
        }

        private void comboBox_busqueda_departamento_Validated(object sender, EventArgs e)
        {
            if (this.comboBox_busqueda_departamento.Text == "" | this.comboBox_busqueda_departamento.SelectedItem == null)
            {
                this.comboBox_busqueda_departamento.SelectedItem = departamento_cualquiera;
            }           
        }

        private void comboBox_busqueda_localidad_Validated(object sender, EventArgs e)
        {
            if (this.comboBox_busqueda_localidad.Text == "" | this.comboBox_busqueda_localidad.SelectedItem == null)
            {
                this.comboBox_busqueda_localidad.SelectedItem = localidad_cualquiera;
            }           
        }

        
            
    }
}